package Stack_04.calculate_03;

/*
 * @Author 罗
 * @date 2020/3/13 - 11:12 下午
 *
 */

import Stack_04.BasedOnTheLinkedList_02.StackBasedOnTheLinkedList;

public class StackForCalculator extends StackBasedOnTheLinkedList {




    /**
     * 计算方法
     * @param value1
     * @param value2
     * @param operate
     * @return
     */
    public static double calculate(double value1, double value2, int operate){
//        用于存放计算结果
        double result = 0;
        switch (operate){
            case '+' : result = value2 + value1;break;
//            注意减法和除法的value1 和 value2的顺序
            case '-' : result = value2 - value1;break;
            case '*' : result = value2 * value1;break;
            case '/' : result = value2 / value1;break;
        }

        return result;
    }



    /**
     * 返回运算符的优先级，优先级是由程序员来确定，优先级用数字来表示
     *      数字越大 优先级越高
     * @param operation
     * @return
     */
    public static int priority(int operation){
        /*
        * 因为java中 char变量的值对应一个int数字(ASC码)
        * */
        if(operation == '*' || operation == '/'){
            return 1;
        }else if(operation == '+' || operation == '-'){
            return 0;
        }else{
//            这里将小括号也"(",")"也包含进去了
            return -1;
        }
    }

    /**
     * 判断是不是一个运算符
     * @param value
     * @return
     */
    public static boolean isOperation(char value){
        return value == '+' || value == '-' ||
                value == '*' || value == '/' ||
                value == '(' || value == ')';
    }
}
